import Vue from 'vue'
import Vuex from 'vuex'

Vue.use(Vuex)

export default new Vuex.Store({
  // state用于存储全局数据，在此处定义的状态数据全局组件可用
  state: {
    // 在此处可以存储当前登录用户
    // 当刷新时直接去sessionStorage中寻找user，如果存在则直接加载
    user: JSON.parse(sessionStorage.getItem('user')),
    token: sessionStorage.getItem('t'), // 加载本地token字符串
    city: '',
  },

  /** 主要用于定义一些方法，提供修改state中的数据的功能 */
  mutations: {
    /** 更新保存token字符串 */
    updateToken(state, token) {
      state.token = token
      sessionStorage.setItem('t', token)
    },

    /** 更新state中用户信息的方法, 方法的定义有如下要求：
     *  1. 方法名自定义
     *  2. 参数列表中包含两个参数:(state, payload)
     *     state: 当前vuex中的state对象
     *     payload： 用户传递的自定义参数
     */
    updateUserInfo(state, payload) {
      // 将payload数据直接赋值给state.user属性
      state.user = payload
      // 在此将user对象存入sessionStorage中一份
      sessionStorage.setItem('user', JSON.stringify(payload))
    },
  },

  actions: {
    login() {
      // 异步请求，登录业务，返回用用
      // 再更新state
    },
  },

  getters: {},

  modules: {},
})
